package com.tbit.uqbike.service.business;

import com.tbit.uqbike.object.pojo.MoneyData;
import com.tbit.uqbike.object.pojo.StatPark;
import com.tbit.uqbike.object.pojo.UserMember;
import com.tbit.uqbike.object.pojo.VipCard;
import com.tbit.uqbike.object.pojo.dto.PackageDelayDTO;
import com.tbit.uqbike.object.value.UserRcDetail;
import com.tbit.common.entity.view.Result;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: chen
 * @Description: 会员卡
 * @Date: 创建于 11:26 2020/7/6
 */
public interface VipCardService {
    /**
     * 分页
     */
    List<VipCard> queryPage(Integer accountId, Integer pageNO, Integer rowCount);

    /**
     * 总数
     */
    Integer queryCount(Integer accountId);

    /**
     * 添加
     */
    void add(VipCard vipCard);

    /**
     * 修改
     */
    void update(VipCard vipCard);

    /**
     * 删除
     */
    void del(VipCard vipCard);

    /**
     * 置为失效
     */
    void edit(Integer vipId);

    /**
     * 用户购买记录
     */
    List<UserMember> userVipPage(Integer accountId, Integer userId, String phone, Integer pageNO, Integer rowCount, Date startTime, Date endTime);

    /**
     * 总数
     */
    Integer userVipCount(Integer accountId, Integer userId, String phone, Date startTime, Date endTime);

    /**
     * 按天分组统计会员卡
     */
    List<StatPark> groupByDay(Integer accountId, Long startTime, Long endTime);

    /**
     * 购买会员卡套餐记录
     */
    List<UserRcDetail> page(Integer accountId, Integer type, Long startTime,
                            Long endTime, Integer pageNO, Integer rowCount);

    /**
     * 购买会员卡套餐记录总数
     */
    Integer count(Integer accountId, Integer type, Long startTime,
                  Long endTime);

    /**
     * 导出
     */
    List<UserRcDetail> export(Integer accountId, Integer type, Long startTime,
                              Long endTime);

    List<Map<String, Object>> vipCountByType(HashMap<String, Object> params, Integer accountId, Integer type, Long startTime, Long endTime);

    MoneyData getTotalMoney(HashMap<String, Object> params, Integer accountId, Integer type, Long startTime, Long endTime);

    Result<String> modifyVipCardExpireTime(PackageDelayDTO delayDTO);

    /**
     * 根据用户id和区域id集合获取最近会员卡购买记录
     *
     * @param userId        用户id
     * @param accountIdList 区域id集合
     */
    UserMember userVipPageByAccountIdList(Integer userId, List<Integer> accountIdList);
}
